package com.dl.mall.mapper;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.dl.mall.entity.admin.Admin;
import com.dl.mall.entity.user.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 用户类
 * @author DL
 * @create 2022-01-17 14:48
 */
@Mapper
public interface UserMapper {

    /**
     * 登陆
     * @param username 用户名
     * @return 用户
     */
    User login(@Param("username")String username);

    /**
     * 增加用户
     * @param userId 用户id  uuid
     * @param username 用户名
     * @param password 密码
     * @return 受影响的行数
     */
    int insertUser(JSONObject user);

    /**
     * 更新密码
     * @param userId 用户名
     * @param password 原密码
     * @return 受影响的行数
     */
    int updatePassword(@Param("userId") String userId, @Param("password") String password);

    /**
     * 更新用户个人信息
     * @return 受影响的行数
     */
    int updateUserBasicInfo(User user);

    /**
     * 更新用户个人信息
     * @param user 用户对象
     * @return 受影响的行数
     */
    int updateUserAllInfo(User user);

    /**
     * 根据 用户id 查询用户基本信息
     * @param userId 用户id
     * @return 用户
     */
    User queryUserBasicInfo(String userId);

    /**
     * 根据用户名查询用户信息，检查用户名是否重复
     * @param username 用户名
     * @return 用户信息
     */
    User queryUserByUserName(String username);


    /* ================================ admin =============================== */

    /**
     * 更新账号状态
     * @param userId 用户名
     * @param state 状态 1=正常 0=锁定
     * @return 受影响的行数
     */
    int updateState(@Param("userId")String userId, @Param("state")int state);

    /**
     * 更新用户信息
     * @param user 信息
     * @return
     */
    int updateUserInfo(User user);

    /**
     * 根据 用户id 查询用户(用于修改密码获得原密码)
     * @param userId id
     * @return 用户
     */
    User queryUserByUserId(String userId);

    /**
     * 根据 条件 查询用户列表
     * @param condition 条件
     * @return 用户分页
     */
    List<User> queryUserByCondition(JSONObject condition);


}
